﻿--#### 变量
use BankTest
go
--1. 为赵云此人进行开户开卡操作，赵云身份证：420107199904054233
select * from AccountInfo
insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
values('420107199904054233','13843819438','赵云',GETDATE())


--2. 需要求出张飞的银行卡卡号和余额，张飞身份证：420107199602034138  （1.使用连接查询，2.使用变量）
declare @accountcode varchar(30)
select @accountcode = AccountCode  from AccountInfo where AccountCode = '420107199602034138' 
select @accountcode 银行卡卡号,B.CardMoney from BankCard B
join AccountInfo A on A.AccountId = B.AccountId where A.AccountCode = @accountcode

select * from AccountInfo


--#### 逻辑控制

--##### 条件分支if-else

--​	3.某用户银行卡号为“6225547854125656”，该用户执行取钱操作，取钱5000元，余额充足则进行取钱操作，
--并提示"取钱成功"，否则提示“余额不足”。
declare @cardMoney int
select @cardMoney = (select CardMoney from BankCard where CardNo = '6225547854125656')
if (@cardMoney-5000 > 0 )
	begin
		print'取钱成功'
		update BankCard set CardMoney = @cardMoney - 5000 where CardNo = '6225547854125656'
		insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) values('6225547854125656',0,5000,getdate());
	end
else
	begin
		print'取钱失败'
	end
	





--##### 条件分支:case-when

--​	4.查询银行卡信息，将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”，并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户"，  

----显示列分别为卡号，身份证，姓名，余额，用户等级，银行卡状态。

select CardNo 卡号,AccountCode 身份证,RealName 姓名, CardMoney 余额, 
case
	when CardMoney>300000 then 'VIP客户'
	else '普通用户'
end 用户等级,
case
	when CardState=1 then '正常'
	when CardState=2 then '挂失'
	when CardState=3 then '冻结'
	else '注销'
end 银行卡状态状态
from BankCard
inner join AccountInfo on AccountInfo.AccountId = BankCard.AccountId

--##### **while**

--​	5.循环打印1-10。
declare @a int = 0
	while @a < 10
		begin
			set @a = @a + 1
			print @a
		end


--​	6.打印99乘法表
declare @i int = 1 
while(@i<=9) 
begin
	declare @j int =1
	declare @b varchar(250) = ''
	while(@j<=@i)
		begin
			set @b = @b+cast(@j as varchar(1))+'*'+cast(@i as varchar(1))+'='+cast(@i*@j as varchar(40))+CHAR(9)
			set @j += 1
		end
	print @b
	set @i += 1
end